
https://leetcode.cn/problems/regular-expression-matching/description/
//class Solution {
//public:
//    bool isMatch(string s, string p)
//    {
//        int m = s.size(), n = p.size();
//        vector<vector<bool>> dp(m + 1, vector<bool>(n + 1));
//        s = " " + s;
//        p = " " + p;
//        dp[0][0] = true;
//        for (int i = 2; i <= n; i += 2)
//        {
//            if (p[i] == '*') dp[0][i] = true;
//            else break;
//        }
//
//        for (int i = 1; i <= m; i++)
//        {
//            for (int j = 1; j <= n; j++)
//            {
//                if (p[j] == '*')
//                {
//                    dp[i][j] = dp[i][j - 2] || (p[j - 1] == '.' || s[i] == p[j - 1]) && dp[i - 1][j];
//                }
//                else
//                {
//                    dp[i][j] = (p[j] == '.' || s[i] == p[j]) && dp[i - 1][j - 1];
//                }
//            }
//        }
//        return dp[m][n];
//    }
//};



https://leetcode.cn/problems/wildcard-matching/description/
//class Solution {
//public:
//    bool isMatch(string s, string p)
//    {
//        int m = s.size(), n = p.size();
//        vector<vector<bool>> dp(m + 1, vector<bool>(n + 1));
//        s = " " + s;
//        p = " " + p;
//        dp[0][0] = true;
//        for (int i = 1; i <= n; i++)
//        {
//            if (p[i] == '*') dp[0][i] = true;
//            else break;
//        }
//
//        for (int i = 1; i <= m; i++)
//        {
//            for (int j = 1; j <= n; j++)
//            {
//                if (p[j] == '*')
//                {
//                    dp[i][j] = dp[i - 1][j] || dp[i][j - 1];
//                }
//                else
//                {
//                    dp[i][j] = (p[j] == '?' || s[i] == p[j]) && dp[i - 1][j - 1];
//                }
//            }
//        }
//        return dp[m][n];
//    }
//};